iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
0
Modern Web

PHP框架-Symfony4 + api platform 系列 第 11

Day#11 Api Platform 裡的兩大設定,針對單筆資料及多筆,除了數量外,它們其實大不同R ( ゚∀゚)o彡゚

  • 分享至 

  • xImage
  •  

這一篇先來講兩個設定,一個是collectionOperations,一個是itemOperations ,
前者,我們可以把它看作一個集合的設定,集合裡包含所有資料,
而後者,我們可以看做是單一比資料的設定,什麼意思呢...?
就是在用api訪問itemOperations時,必須將id傳給它


首先,我們先將這兩個設定加上去,一樣打開我們先前所使用的實體類,接著將兩個設定丟進去

/**
 * @ORM\Entity
 * @ORM\Table(name="test_entity")
 * @TestCheck()
 * @ApiResource(
 *     collectionOperations={"get","post"},
 *     itemOperations={"get","put","delete"}
 * )
 */
class TestEntity
{

    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * @ORM\Column(name="id", type="integer")
     */
    private $id;


    /**
     * @ORM\Column(name="name",type="string",length=20,nullable=true)
     * @Assert\NotBlank()
     * @Assert\Length(max="20",min="5",maxMessage="長度不可超過20字",minMessage="長度不可低於5個字")
     */
    private $name;


    /**
     * @ORM\Column(name="email",type="string",length=50,nullable=true)
     * @Assert\Email()
     */
    private $email;

    /**
     * @return int
     */
    public function getId(): int
    {
        return $this->id;
    }

    /**
     * @param int $id
     */
    public function setId(int $id): void
    {
        $this->id = $id;
    }

    /**
     * @return mixed
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * @param mixed $name
     */
    public function setName($name): void
    {
        $this->name = $name;
    }


}

以上是假設我讓集合可以有get和post這兩支api,讓單一筆資料的設定可以有get,put,delete這三支api

我們要怎麼知道這兩個operation分別可以用http的哪幾種方法呢? 以下幫各位看官們用表格做整理

那我們要怎麼知道今天哪個實體類有哪幾支api呢...要一個一個點開來看嗎?
當然不用!! 既然可以用註解式就解決的東西,應該也要方便我們看到吧!!!?

在網址上輸入本機port號後面接上,config目錄下子目錄routes的api_platform.yaml裡的prefix(前綴),
這是一種方式,如果要在後面代上uri (index.html) 也是可以進到相同頁面

但要開啟這個頁面前,記得先將server啟動 ( 在專案目錄下執行 symfony serve )

我們剛剛有將collectionOperations 跟 itemOperations 加到API Resource裡,
所以我們在頁面上會看到以下這張圖

剛剛我們給itemOperations GET PUT 和DELETE 方法 , 看見後面的{id}了嗎!!!?
那就是針對單一筆資料做動作最好的證明!!

對著各個Method 點開, 並點下右上角的try it out ,就可以模擬使用者訪問這支api的樣子

每個Method 都會包含兩個部分 , Request 跟 Response

POST的Request,裡面填的是要送出去的欄位跟值,欄位預設是有權限可以寫的,
之後會提到,如何針對欄位去做寫跟讀的權限控管

GET的Request 就分兩種了

集合的Get,預設會有一個頁面的搜尋條件,裡面可以輸入所要搜尋的頁數,
之後也會提到如何調整一頁裡出現的資料筆數及加上額外的搜尋條件

針對單一筆資料的GET則是需要給予id來當作搜尋條件

在兩者的Response部分

集合GET會提供兩個後續會講到很重要的資訊

1.hydra:member : 所搜尋出來的所有資料的資訊

2.hydra:totalItems : 搜尋出來的總筆數

針對單一筆資料GET的Response 則是單純回應我們資料的資訊

PUT和PATCH一樣,都要給予所要更動資料的id,欄位及值

DELETE最單純,只要給予要刪除資料的id就好,但它不會給予任何Response , 阿東西被我刪光光了,是要給什麼回應啦~

無論是集合的GET,單一筆資料的GET,PUT,PATCH的http 回應碼 都是200

比較特殊的是 DELETE 是 204 ,和POST 201

這麼多種Method ,我最喜歡DELETE了 , 除了單純外 ,還可以把資料通通砍光光,眼不見為淨 ...

下一篇,要來講 api platform 關聯要怎麼看跟使用 ,
其實是透過一個叫IRI的神奇東西,雖然神奇,但它其實有些規範的,越好用的東西,有時候就越龜毛R ~


上一篇
Day#10 API Platform 是什麼東西,能吃嗎 (((゚Д゚;)))
下一篇
Day#12 Api platform IRI 鎖鏈!? 咦,是酷拉皮卡的鎖鏈嗎?(๑´ڡ`๑)
系列文
PHP框架-Symfony4 + api platform 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言